package com.janetfilter.core.utils;

import java.util.Random;

/**
 * 字符串工具类，提供字符串相关的操作方法
 */
public class StringUtils {
    // 用于生成随机方法名的字符集
    private static final String CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // 随机数生成器
    private static final Random RANDOM = new Random();

    /**
     * 检查字符串是否为空（null或空字符串）
     * 
     * @param s 要检查的字符串
     * @return 如果字符串为null或空字符串则返回true
     */
    public static boolean isEmpty(String s) {
        return null == s || s.isEmpty();
    }

    /**
     * 安全地拼接对象的字符串表示
     * 
     * @param args 要拼接的对象数组
     * @return 拼接后的字符串
     */
    public static String join(Object[] args) {
        if (null == args) {
            return "";
        }

        StringBuilder sb = new StringBuilder();
        for (Object arg : args) {
            sb.append(arg);
        }

        return sb.toString();
    }

    /**
     * 生成随机方法名
     * 用于生成唯一的方法名，例如用作native方法前缀
     * 
     * @param length 方法名长度
     * @return 生成的随机方法名
     */
    public static String randomMethodName(int length) {
        StringBuilder sb = new StringBuilder();
        int len = CHARS.length();

        for (int i = 0; i < length; i++) {
            sb.append(CHARS.charAt(RANDOM.nextInt(len)));
        }

        return sb.toString();
    }

    /**
     * 安全地将字符串转换为Long类型
     * 如果字符串为null或不是有效的数字格式，则返回null
     * 
     * @param val 要转换的字符串
     * @return 转换后的Long值，如果转换失败则返回null
     */
    public static Long toLong(String val) {
        if (null == val) {
            return null;
        }

        try {
            return Long.parseLong(val);
        } catch (NumberFormatException e) {
            return null;
        }
    }
}
